1 词法
(1) 注释
遵循Java形式的注释。
只用于语法和规则的前面。
分为单行和多行两种。
(2) 识别符(Identifier)
标识和词法规则使用大写字母开头,通过Java的Character.isUpperCase方法定义。
解析规则名称使用小写字母开头。
首字符可以是大小写字母、数字和下划线。
ANTLR名称也可以是Unicode编码,如汉字。
1 | ID, LPAREN, RIGHT_CURLY // token names/lexer rules |
ANTLR使用以下规则支持Unicode的解析和词法规则名称。
1 | ID : a=NameStartChar NameChar* |
NameChar定义有效的识别字符:
1 | fragment |
使用非UTF-8编码的文件时,需要指定-encoding选项。
(3) 字面量
使用单引号'
表示字面量。
不区分字符和字符串字面量。
字面量不能包含正则。
可以使用Unicode转义字符。
可以使用常见的逃逸符,如\n、\r、\t、\b、\f等。
输入文件的编码默认使用目标语言的的运行时库的配置,如Java使用UTF-8。
(4) 动作
动作使用花括号包含目标语言的代码块。
内嵌代码可以出现在@header和@member修饰的动作、解析器、词法规则、异常捕获、解析器规则的属性模块和一些规则元素选项(当前仅predicates)。
ANTLR只解析与语法属性相关的部分,即使是动作内部的词法规则也不会解析。
(5) 关键字
保留关键字包括:
1 | import, fragment, lexer, parser, grammar, returns, |
注意:虽然rule不是关键字,但是不建议用作规则名称。
此外,不建议使用目标语言的关键字作为名称,以避免歧义。